package com.tyam.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;

import com.tyam.bean.Contribuinte;

public class ContribuinteDAOHibernate implements ContribuinteDAO {

	HibernateDAOFactory hibernateDAOFactory = null;
	HibernateDAO<Contribuinte> hibernateDAO = null;

	public ContribuinteDAOHibernate() {
		hibernateDAOFactory = new HibernateDAOFactory();
		hibernateDAO = hibernateDAOFactory.getContribuinteDAO();
	}
	
	@Override
	public boolean inserir(Contribuinte contribuinte) throws Exception {
		boolean ok = false;

		try {
			hibernateDAO.add(contribuinte);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} 
		return ok;
	}

	@Override
	public boolean alterar(Contribuinte contribuinte) throws Exception {
		boolean ok = false;

		try {
			hibernateDAO.update(contribuinte);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		}

		return ok;
	}

	@Override
	public boolean excluir(Contribuinte contribuinte) throws Exception {
		boolean ok = false;

		try {
			hibernateDAO.remove(contribuinte);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} 

		return ok;
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<Contribuinte> getSelecionar(String nome) {
		 
		
	    Criteria criteria = hibernateDAO.getSession().createCriteria(Contribuinte.class);
	    criteria.add(Restrictions.like("nome",nome, MatchMode.ANYWHERE));
	    List<Contribuinte> lista = criteria.list();

		return lista;
	}	

	@Override
	public Contribuinte getContribuinte(int codigoContribuinte) {
		return hibernateDAO.get(codigoContribuinte);
	}

	@Override
	public List<Contribuinte> getListarTodos() {
		return hibernateDAO.listAll();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Contribuinte> getSelecionar(String cpfCnpjPesquisa, String textoPesquisa) {
		String 	sql = " FROM Contribuinte WHERE codigoContribuinte <> 0 ";

		if (!cpfCnpjPesquisa.isEmpty()){
			sql += " AND cpfCnpj like '"+cpfCnpjPesquisa+"%'";
		}
		if (!textoPesquisa.isEmpty()){
			sql += " AND nome like '"+textoPesquisa+"%'";
		}
		
		sql += " ORDER BY nome";		

		List<Contribuinte> lista = hibernateDAO.getSession().createQuery(sql).list();
 
	    
		return lista;
	}

	@Override
	public Contribuinte getContribuinte(String cpfCnpj) {
		String 	sql = " FROM Contribuinte WHERE codigoContribuinte <> 0 ";

		sql += " AND cpfCnpj = '"+cpfCnpj+"'";
		
		sql += " ORDER BY codigoContribuinte";		

		Contribuinte contribuinte = (Contribuinte) hibernateDAO.getSession().createQuery(sql).uniqueResult();
		return contribuinte;

	}


}
